热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

主存|事情_105道Java面试题,认真思考对你面试很有价值!

篇首语:本文由编程笔记#小编为大家整理,主要介绍了105道Java面试题,认真思考对你面试很有价值!相关的知识,希望对你有一定的参考价值。一、Java基础

篇首语:本文由编程笔记#小编为大家整理,主要介绍了105道Java面试题,认真思考对你面试很有价值!相关的知识,希望对你有一定的参考价值。



一、Java基础

1、什么是面向对象?

2、JDK JRE JVM

3、==和equals比较

4、hashCode与equals

5、final

6、String、StringBuffer、StringBuilder

7、重载和重写的区别

8、接口和抽象类的区别

9、List和Set的区别

10、ArrayList和LinkedList区别

11、HashMap和HashTable有什么区别?其底层实现是什么?

12、ConcurrentHashMap原理,jdk7和jdk8版本的区别?

13、什么是字节码?采用字节码的好处是什么?

14、Java中的异常体系

15、Java类加载器

16、双亲委托模型

17、GC如何判断对象可以被回收

105道Java面试题答案解析:105道Java面试题完整版




选择Java基础里的其中一道解答


JDK JRE JVM

JDK:

Java Develpment Kit java 开发工具

JRE:

Java Runtime Environment java运行时环境

JVM:

java Virtual Machine java 虚拟机


二、线程、并发相关

1、线程的生命周期?线程有几种状态

2、sleep()、wait()、join()、yield()的区别

3、对线程安全的理解

4、Thread、Runable的区别

5、对守护线程的理解

6、ThreadLocal的原理和使用场景

7、ThreadLocal内存泄露原因,如何避免

8、并发、并行、串行的区别

9、并发的三大特性

10、volatile

11、为什么用线程池?解释下线程池参数?

12、简述线程池处理流程

13、线程池中阻塞队列的作用?为什么是先添加列队而不是先创建最大线程?

14、线程池中线程复用原理




选择Java线程与并发里的其中一道解答


volatile

(1)保证被volatile修饰的共享变量对所有线程总是可见的,也就是当一个线程修改了一个被volatile修饰共享变量的值,新值总是可以被其他线程立即得知。

//线程1
boolean stop = false;
while(!stop)
doSomething();
//线程2
stop = true;

如果线程2改变了stop的值,线程1一定会停止吗?不一定。当线程2更改了stop变量的值之后,但是还没来得及写入主存当中,线程2转去做其他事情了,那么线程1由于不知道线程2对stop变量的更改,因此还会一直循环下去。

(2)禁止指令重排序优化。

int a = 0;
bool flag = false;
public void write()
a = 2; //1
flag = true; //2
public void multiply()
if (flag) //3
int ret = a * a;//4

write方法里的1和2做了重排序,线程1先对flag赋值为true,随后执行到线程2,ret直接计算出结果,再到线程1,这时候a才赋值为2,很明显迟了一步。

但是用volatile修饰之后就变得不一样了

第一:使用volatile关键字会强制将修改的值立即写入主存;

第二:使用volatile关键字的话,当线程2进行修改时,会导致线程1的工作内存中缓存变量stop的缓存行无效(反映到硬件层的话,就是CPU的L1或者L2缓存中对应的缓存行无效);

第三:由于线程1的工作内存中缓存变量stop的缓存行无效,所以线程1再次读取变量stop的值时会去主 存读取。

inc++; 其实是两个步骤,先加加,然后再赋值。不是原子性操作,所以volatile不能保证线程安全。




三、spring

1、如何实现一个IOC容器

2、spring是什么?

3、谈谈你对AOP的理解

4、谈谈你对IOC的理解

5、BeanFactory和ApplicationContext有什么区别?

6、描述一下Spring Bean的生命周期?

7、解释下Spring支持的几种bean的作用域。

8、Spring框架中的单例Bean是线程安全的么?

9、Spring 框架中都用到了哪些设计模式?

10、Spring事务的实现方式和原理以及隔离级别?

11、spring事务传播机制

12、spring事务什么时候会失效?

13、什么是bean的自动装配,有哪些方式?




选择spring里的其中一道解答


谈谈你对AOP的理解

系统是由许多不同的组件所组成的,每一个组件各负责一块特定功能。除了实现自身核心功能之外,这些组件还经常承担着额外的职责。例如日志、事务管理和安全这样的核心服务经常融入到自身具有核心业务逻辑的组件中去。这些系统服务经常被称为横切关注点,因为它们会跨越系统的多个组件。

当我们需要为分散的对象引入公共行为的时候,OOP则显得无能为力。也就是说,OOP允许你定义从 上到下的关系,但并不适合定义从左到右的关系。例如日志功能。

日志代码往往水平地散布在所有对象层次中,而与它所散布到的对象的核心功能毫无关系。

在OOP设计中,它导致了大量代码的重复,而不利于各个模块的重用。

AOP:将程序中的交叉业务逻辑(比如安全,日志,事务等),封装成一个切面,然后注入到目标对象(具体业务逻辑)中去。AOP可以对某个对象或某些对象的功能进行增强,比如对象中的方法进行增强,可以在执行某个方法之前额外的做一些事情,在某个方法执行之后额外的做一些事情




四、springmvc、springBoot、Mybatis

1、Spring Boot、Spring MVC 和 Spring 有什么区别

2、SpringMVC 工作流程

3、Spring MVC的主要组件?

4、Spring Boot 自动配置原理?

5、如何理解 Spring Boot 中的 Starter

6、什么是嵌入式服务器?为什么要使用嵌入式服务器?

7、mybatis的优缺点

8、MyBatis 与Hibernate 有哪些不同?

9、#和$的区别是什么?

10、简述 Mybatis 的插件运行原理,如何编写一个插件。




选择springmvc、springBoot、Mybatis里的其中一道解答


SpringMVC 工作流程

1)用户发送请求至前端控制器 DispatcherServlet。

2)DispatcherServlet 收到请求调用 HandlerMapping 处理器映射器。

3)处理器映射器找到具体的处理器(可以根据 xml 配置、注解进行查找),生成处理器及处理器拦截器(如果有则生成)一并返回给 DispatcherServlet。

4)DispatcherServlet 调用 HandlerAdapter 处理器适配器。

5)HandlerAdapter 经过适配调用具体的处理器(Controller,也叫后端控制器)

6)Controller 执行完成返回 ModelAndView。

7)HandlerAdapter 将 controller 执行结果 ModelAndView 返回给 DispatcherServlet。8)DispatcherServlet 将 ModelAndView 传给 ViewReslover 视图解析器。

9)ViewReslover 解析后返回具体 View。

10)DispatcherServlet 根据 View 进行渲染视图(即将模型数据填充至视图中)。

11)DispatcherServlet 响应用户。




五、mysql和Redis

1、索引的基本原理

2、mysql聚簇和非聚簇索引的区别

3、mysql索引的数据结构,各自优劣

4、索引设计的原则?

5、什么是最左前缀原则?什么是最左匹配原则

6、锁的类型有哪些

7、InnoDB存储引擎的锁的算法

8、关心过业务系统里面的sql耗时吗?统计过慢查询吗?对慢查询都怎么优化过?

9、事务的基本特性和隔离级别

10、ACID靠什么保证的?

11、什么是MVCC

12、分表后非sharding_key的查询怎么处理,分表后的排序?

13、mysql主从同步原理

14、简述MyISAM和InnoDB的区别

15、简述mysql中索引类型及对数据库的性能的影响

16、mysql执行计划怎么看




选择MySQL里的其中一道解答


索引的基本原理

索引用来快速地寻找那些具有特定值的记录。如果没有索引,一般来说执行查询时遍历整张表。

索引的原理:就是把无序的数据变成有序的查询

(1) 把创建了索引的列的内容进行排序

(2)对排序结果生成倒排表

(3)在倒排表内容上拼上数据地址链

(4)在查询的时候,先拿到倒排表内容,再取出数据地址链,从而拿到具体数据




六、Redis

1、RDB 和 AOF 机制

2、Redis的过期键的删除策略

3、Redis线程模型、单线程快的原因

4、简述Redis事务实现

5、redis集群方案

6、redis 主从复制的核心原理

7、缓存雪崩、缓存穿透、缓存击穿




选择Redis里的其中一道解答


Redis的过期键的删除策略

Redis是key-value数据库,我们可以设置Redis中缓存的key的过期时间。Redis的过期策略就是指当Redis中缓存的key过期了,Redis如何处理。

惰性过期:只有当访问一个key时,才会判断该key是否已过期,过期则清除。该策略可以最大化地节省CPU资源,却对内存非常不友好。极端情况可能出现大量的过期key没有再次被访问,从而不会被清除,占用大量内存。

定期过期:每隔一定的时间,会扫描一定数量的数据库的expires字典中一定数量的key,并清除其中已过期的key。该策略是一个折中方案。通过调整定时扫描的时间间隔和每次扫描的限定耗时,可以在不同情况下使得CPU和内存资源达到最优的平衡效果。

(expires字典会保存所有设置了过期时间的key的过期时间数据,其中,key是指向键空间中的某个键的 指针,value是该键的毫秒精度的UNIX时间戳表示的过期时间。键空间是指该Redis集群中保存的所有键。)

Redis中同时使用了惰性过期和定期过期两种过期策略。




七、分布式与微服务

1、CAP理论,BASE理论

2、负载均衡算法、类型

3、分布式架构下,Session 共享有什么方案

4、简述你对RPC、RMI的理解

5、分布式id生成方案

6、分布式锁解决方案

7、分布式事务解决方案

8、如何实现接口的幂等性

9、简述ZAB 协议

10、简述zk的命名服务、配置管理、集群管理

11、讲下Zookeeper watch机制

12、zk和eureka的区别

13、Spring Cloud和Dubbo的区别

14、什么是Hystrix?简述实现机制

15、springcloud核心组件及其作用

16、Dubbo 的整体架构设计及分层




选择分布式与微服务里的其中一道解答


Spring Cloud和Dubbo的区别

底层协议:springcloud基于http协议,dubbo基于Tcp协议,决定了dubbo的性能相对会比较好

注册中心:Spring Cloud 使用的 eureka ,dubbo推荐使用zookeeper

模型定义:dubbo 将一个接口定义为一个服务,SpringCloud 则是将一个应用定义为一个服务

SpringCloud是一个生态,而Dubbo是SpringCloud生态中关于服务调用一种解决方案(服务治理)




八、中间件MQ

1、简述RabbitMQ的架构设计

2、RabbitMQ如何确保消息发送 ? 消息接收?

3、RabbitMQ事务消息

4、RabbitMQ死信队列、延时队列

5、RabbitMQ镜像队列机制

6、简述kafka架构设计

7、kafka怎么处理消息顺序、重复发送、重复消费、消息丢失

8、Kafka在什么情况下会出现消息丢失及解决方案?

9、Kafka是pull?push?优劣势分析

10、Kafka中zk的作用

11、简述kafka的rebalance机制

12、Kafka的性能好在什么地方




选择中间件MQ里的其中一道解答


简述kafka架构设计

Consumer Group:消费者组,消费者组内每个消费者负责消费不同分区的数据,提高消费能力。逻 辑上的一个订阅者。

Topic:可以理解为一个队列,Topic 将消息分类,生产者和消费者面向的是同一个 Topic。

Partition:为了实现扩展性,提高并发能力,一个Topic 以多个Partition的方式分布到多个 Broker上,每个 Partition 是一个 有序的队列。一个 Topic 的每个Partition都有若干个副本(Replica),一个Leader 和若干个 Follower。生产者发送数据的对象,以及消费者消费数据的对象,都是 Leader。Follower负责实时从 Leader 中同步数据,保持和 Leader 数据的同步。Leader 发生故障时,某个Follower 还会成为新的 Leader。

Offset:消费者消费的位置信息,监控数据消费到什么位置,当消费者挂掉再重新恢复的时候,可以从 消费位置继续消费。

Zookeeper:Kafka 集群能够正常工作,需要依赖于 Zookeeper,Zookeeper 帮助 Kafka 存储和管理 集群信息。



希望能帮助到你在面试前的复习且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。

105道Java面试题答案解析:105道Java面试题完整版


推荐阅读
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • 本文介绍了Java高并发程序设计中线程安全的概念与synchronized关键字的使用。通过一个计数器的例子,演示了多线程同时对变量进行累加操作时可能出现的问题。最终值会小于预期的原因是因为两个线程同时对变量进行写入时,其中一个线程的结果会覆盖另一个线程的结果。为了解决这个问题,可以使用synchronized关键字来保证线程安全。 ... [详细]
  • 在springmvc框架中,前台ajax调用方法,对图片批量下载,如何弹出提示保存位置选框?Controller方法 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • 重入锁(ReentrantLock)学习及实现原理
    本文介绍了重入锁(ReentrantLock)的学习及实现原理。在学习synchronized的基础上,重入锁提供了更多的灵活性和功能。文章详细介绍了重入锁的特性、使用方法和实现原理,并提供了类图和测试代码供读者参考。重入锁支持重入和公平与非公平两种实现方式,通过对比和分析,读者可以更好地理解和应用重入锁。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • JVM 学习总结(三)——对象存活判定算法的两种实现
    本文介绍了垃圾收集器在回收堆内存前确定对象存活的两种算法:引用计数算法和可达性分析算法。引用计数算法通过计数器判定对象是否存活,虽然简单高效,但无法解决循环引用的问题;可达性分析算法通过判断对象是否可达来确定存活对象,是主流的Java虚拟机内存管理算法。 ... [详细]
  • 本文介绍了如何使用python从列表中删除所有的零,并将结果以列表形式输出,同时提供了示例格式。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • Android工程师面试准备及设计模式使用场景
    本文介绍了Android工程师面试准备的经验,包括面试流程和重点准备内容。同时,还介绍了建造者模式的使用场景,以及在Android开发中的具体应用。 ... [详细]
  • 基于Socket的多个客户端之间的聊天功能实现方法
    本文介绍了基于Socket的多个客户端之间实现聊天功能的方法,包括服务器端的实现和客户端的实现。服务器端通过每个用户的输出流向特定用户发送消息,而客户端通过输入流接收消息。同时,还介绍了相关的实体类和Socket的基本概念。 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
  • 本文整理了Java面试中常见的问题及相关概念的解析,包括HashMap中为什么重写equals还要重写hashcode、map的分类和常见情况、final关键字的用法、Synchronized和lock的区别、volatile的介绍、Syncronized锁的作用、构造函数和构造函数重载的概念、方法覆盖和方法重载的区别、反射获取和设置对象私有字段的值的方法、通过反射创建对象的方式以及内部类的详解。 ... [详细]
author-avatar
也许_枉然
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有